Identity, Security and Trust
Every request in a health information exchange carries an implicit claim: I am this party, acting for this person, for this purpose, and I am permitted to do this. The security architecture is the machinery that makes each part of that claim verifiable.
It cannot be added later. Retrofitting identity onto an exchange that already runs on shared API keys means re-onboarding every participant.
Five kinds of identity
They are frequently conflated, and each needs a different mechanism.
| Identity | Who or what | Established by | Used for |
|---|---|---|---|
| Patient / client | The person receiving care | Client registry, national ID | Linking records; patient-facing access |
| Health worker | The person providing care | Health worker registry + identity provider | Attribution, authorisation |
| Organisation | The legal entity | Organisation registry, certificates | Trust between institutions |
| System / machine | An application or service | Client credentials, mutual TLS, signed JWT | System-to-system exchange |
| Application | A specific piece of software acting for a user | OAuth client registration | SMART on FHIR app access |
A common architectural error is using one mechanism for all five — typically a shared API key that identifies neither the user, the organisation nor the purpose, and therefore renders the audit log useless at exactly the moment it is needed.
Authentication, authorisation, and the third question
- Authentication — who are you? Handled by an identity provider using OpenID Connect, SAML, certificates or credentials.
- Authorisation — what may you do? Handled by policy, evaluated per request.
- Consent — has the patient agreed to this? A separate question, with a separate answer, from a separate service. See consent and trust.
All three must be satisfied. A clinician may be authenticated, may hold a role permitting record access, and may still be prohibited from viewing a particular patient's record because there is no care relationship or the patient has restricted it.
Access control models
| Model | Decides on | Fits | Limitation |
|---|---|---|---|
| RBAC — role-based | The user's role | Simple, stable organisations | Role explosion; cannot express "only my patients" |
| ABAC — attribute-based | Attributes of user, resource, action, context | Health exchange, where context is everything | Harder to reason about and test |
| PBAC — policy-based | Centrally authored policy, evaluated at a decision point | Multi-organisation ecosystems | Requires a policy engine and its governance |
| ReBAC — relationship-based | The relationship between user and subject | Care relationships, delegation, guardianship | Relationship data must exist and be current |
Health almost always needs more than RBAC. "A nurse may read patient records" is not a usable rule; the rule is closer to "a nurse may read the records of patients with an active encounter at a facility where they hold a current posting, unless the patient has restricted access, except in a documented break-glass event."
That sentence contains user attributes, resource attributes, relationship, consent and an exception path — which is why the decision belongs in an explicit policy engine rather than scattered through application code.
The practical structure:
Request
│
▼
┌─────────────────┐ ┌────────────────────┐
│ Policy │───────▶│ Policy decision │
│ enforcement pt. │ │ point (PDP) │
│ (gateway/API) │◀───────│ evaluates policy │
└─────────────────┘ permit └─────────┬──────────┘
│ / deny │ queries
▼ ▼
Resource identity provider · HWR ·
consent service · care
relationship service
│
▼
Audit event (always, permit or deny)
Denials must be audited as carefully as permissions. A pattern of denied requests is a signal.
Zero trust
The assumption that being inside the network implies nothing. Every request is authenticated and authorised on its own merits.
This is the correct default for health information exchange, because the "internal network" spans organisations with different security postures, and a compromised clinic workstation is a normal event rather than a hypothetical.
In practice: strong workload identity, mutual TLS between services, per-request authorisation, no implicitly trusted network segments, and comprehensive logging. See security architecture and NIST SP 800-207.
In this section
- OAuth 2.0 and OpenID Connect — the protocols, and the health-specific profile
- Consent and trust — consent models, purpose of use, break-glass, provenance
- Security architecture — defence in depth, encryption, key management, threat modelling, resilience
- ISO 27001 — the management system
- ISO 27799 — health-specific security controls
- GDPR — legal obligations for personal data
- SMART on FHIR — app authorisation
Tooling
| Tool | Role | Tier |
|---|---|---|
| Keycloak | Open-source identity and access management; OIDC, SAML, federation, token exchange. The default choice in many national deployments. | 2 |
| Ory Hydra / Kratos | OAuth 2.0 server and identity management, API-first | 2 |
| Open Policy Agent (OPA) | General-purpose policy engine for externalising authorisation decisions | 2 |
| HashiCorp Vault / OpenBao | Secrets and key management | 2 |
| Cert-manager, step-ca | Certificate issuance and rotation | 2 |
None of these is health-specific. The health-specific part is the policy they enforce and the registries they consult.
References
- OAuth 2.0 (RFC 6749) — https://datatracker.ietf.org/doc/html/rfc6749
- OpenID Connect Core — https://openid.net/specs/openid-connect-core-1_0.html
- SMART App Launch — https://hl7.org/fhir/smart-app-launch/
- NIST SP 800-207, Zero Trust Architecture — https://csrc.nist.gov/pubs/sp/800/207/final
- FHIR security — https://hl7.org/fhir/security.html
- Keycloak — https://www.keycloak.org/
- Open Policy Agent — https://www.openpolicyagent.org/